package com.skyline.base.dao;

import java.util.List;

import com.skyline.base.model.Share;
import com.skyline.base.type.ShareType;
import com.skyline.common.bean.Page;

/**
 * 分类的Dao
 * 
 * @author Jairus Chan
 * 
 */
public interface ShareDao extends BaseDao {
	/**
	 * 插入分享
	 * 
	 * @param sharerId
	 *            分享者的Id
	 * @param sharerNickname
	 *            分享者的昵称
	 * @param sharerPortrait
	 *            分享者的头像
	 * @param shareType
	 *            分享类型
	 * @param resourceId
	 *            资源的Id
	 * @param resourceTitle
	 *            资源的标题
	 * @param resourceDigest
	 *            资源的摘要
	 * @param resourceOwnerId
	 *            资源所有者ID
	 * @param resourceOwnerNickname
	 *            资源所有者昵称
	 * @param resourceOwnerPortrait
	 *            资源所有者头像
	 * @param resourceSourceId
	 *            资源的出处
	 * @param resourceSoureceName
	 *            出处的名称
	 */
	public Long insertShare(Long sharerId, String sharerNickname, String sharerPortrait, ShareType shareType, Long resourceId,
			String resourceTitle, String resourceDigest, Long resourceOwnerId, String resourceOwnerNickname, String resourceOwnerPortrait,
			Long resourceSourceId, String resourceSoureceName);

	/**
	 * 通进分享者的ID，查询他所分享的资源
	 * 
	 * @param sharerId
	 *            分享者的Id
	 * @param page
	 *            分页
	 * @return
	 */
	public List<Share> queryShareBySharerId(Long sharerId, Page page);

	/**
	 * 查询ID为id的分享
	 * 
	 * @param id
	 * @return
	 */
	public Share queryShareById(Long id);

	/**
	 * 查询某个分享者特定类型的分享
	 * 
	 * @param sharerId
	 *            分享者的Id
	 * @param shareType
	 *            分享类型
	 * @param page
	 *            分页
	 * @return
	 */
	public List<Share> queryShareBySharerIdAndType(Long sharerId, ShareType shareType, Page page);

	/**
	 * 查询某个分享者特定分享的分享数,当用户分享过某一分享后，它就不能再分享这个分享
	 * 
	 * @param sharerId
	 *            分享者的Id
	 * @param resourceId
	 *            资源的ID
	 * @param page
	 *            分页
	 * @return
	 */
	public Integer queryCountBySharerTypeResource(Long sharerId, ShareType shareType, Long resourceId);

	/**
	 * 删除分享
	 * 
	 * @param id
	 *            分享的Id
	 * @param actionerId
	 *            操作者的ID(只有分享者本人与管理员可以删除分享)
	 */
	public void deleteShare(Long id, Long actionerId);

	/**
	 * 修改顶的数目
	 * 
	 * @param id
	 */
	public void updateUp(Long id);

	/**
	 * 修改踩的数目
	 * 
	 * @param id
	 */
	public void updateDown(Long id);

	/**
	 * 修改分享的数目
	 * 
	 * @param id
	 */
	public void updateShareNum(ShareType shareType, Long resourceId,Long ownerId);
	
	/**
	 * 增加评论数
	 * 
	 * @param id
	 */
	public void updateCommentNumAdd(Long id);

	/**
	 * 减少评论数
	 * 
	 * @param id
	 */
	public void updateCommentNumMinus(Long id);
}
